package br.com.fogas.database.entidade;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import br.com.fogas.database.UtilsDatabase;
import br.com.fogas.database.IMetadata;
import br.com.fogas.modelo.AppDados;
import br.com.fogas.modelo.Configuracao;
import br.com.fogas.modelo.FogasDados;

import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = IMetadata.IConfig.table_name)
public class Config implements IMetadata, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@DatabaseField(generatedId = true, columnName = IConfig.id)
	private Integer id;

	@DatabaseField(width = 100, columnName = IConfig.tx_razao)
	private String tx_razao;

	@DatabaseField(width = 150, columnName = IConfig.tx_logradouro)
	private String tx_logradouro;

	@DatabaseField(width = 50, columnName = IConfig.tx_bairro)
	private String tx_bairro;

	@DatabaseField(width = 9, columnName = IConfig.tx_cep)
	private String tx_cep;

	@DatabaseField(width = 50, columnName = IConfig.tx_cidade)
	private String tx_cidade;

	@DatabaseField(width = 2, columnName = IConfig.tx_uf)
	private String tx_uf;

	@DatabaseField(width = 15, columnName = IConfig.tx_tel1)
	private String tx_tel1;

	@DatabaseField(width = 15, columnName = IConfig.tx_tel2)
	private String tx_tel2;

	@DatabaseField(width = 18, columnName = IConfig.tx_insc_est)
	private String tx_insc_est;

	@DatabaseField(width = 16, columnName = IConfig.tx_cnpj)
	private String tx_cnpj;

	/******
	 * App Dados
	 */

	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName = IConfig.vl_juros_aa)
	private BigDecimal vl_juros_aa;

	@DatabaseField(width = 4, columnName = IConfig.tx_org_vendas)
	private String tx_org_vendas;

	@DatabaseField(width = 4, columnName = IConfig.tx_centro)
	private String tx_centro;

	@DatabaseField(width = 10, columnName = IConfig.tx_nf_serie)
	private String tx_nf_serie;

	@DatabaseField(width = 10, columnName = IConfig.tx_nf_ultimanota)
	private String tx_nf_ultimanota;

	@DatabaseField(width = 10, columnName = IConfig.tx_matricula)
	private String tx_matricula;

	@DatabaseField(width = 100, columnName = IConfig.tx_nome)
	private String tx_nome;
	
	@DatabaseField(width = 20, columnName = IConfig.tx_imei)
	private String tx_imei;
	
	@DatabaseField(width = 15, columnName = IConfig.tx_token)
	private String tx_token;
	
	@DatabaseField(width = 15, columnName = IConfig.tx_plano)
	private String tx_plano;

	/**
	 * Dados Config
	 */
	
	@DatabaseField(columnName = IConfig.nb_ambiente)
	private Integer nb_ambiente;
	
	@DatabaseField(columnName = IConfig.tx_versao)
	private String tx_versao;

	@DatabaseField(width=19, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy HH:mm:ss", columnName = IConfig.ts_sincronizacao)
	private Date ts_sincronizacao;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName = IConfig.cs_sync_nfe_online)
	private boolean cs_sync_nfe_online;
	
	@DatabaseField(columnName = IConfig.nb_tentativas_leitura_qrcode)
	private Integer nb_tentativas_leitura_qrcode;

	/**
	 * Tempo em segundos
	 */
	@DatabaseField(columnName = IConfig.nb_tempo_espera_aut_nfe)
	private Integer nb_tempo_espera_aut_nfe;
	
	/**
	 * Tempo em segundos
	 */
	@DatabaseField(columnName = IConfig.nb_tempo_processamento_sync)
	private Integer nb_tempo_processamento_sync;
	
	/**
	 * senha padrao = adm@123
	 */
	@DatabaseField(columnName = IConfig.tx_senha_adm)
	private String tx_senha_adm;
	
	//@DatabaseField(width = 18, columnName = IConfig.tx_date_time)
	//private String tx_date_time;

	//@DatabaseField(width=19, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy HH:mm:ss", columnName = IConfig.ts_finalizada)
	//private Date ts_finalizada;

	//@DatabaseField(dataType = DataType.BOOLEAN, columnName = IConfig.tf_finalizada)
	//private boolean tf_finalizada;

	//@DatabaseField(columnName = IConfig.nb_timeout)
	//private Integer nb_timeout;

	//@DatabaseField(dataType = DataType.BOOLEAN, columnName = IConfig.cs_sync_cliente)
	//private boolean cs_sync_cliente;

	public Config() {
		
	}

	public Config(Configuracao configuracao) {
		this.tx_razao = configuracao.getFogasDados().getRazao();
		this.tx_logradouro = configuracao.getFogasDados().getLogradouro();
		this.tx_bairro = configuracao.getFogasDados().getBairro();
		this.tx_cep = configuracao.getFogasDados().getCep();
		this.tx_cidade = configuracao.getFogasDados().getCidade();
		this.tx_uf = configuracao.getFogasDados().getUf();
		this.tx_tel1 = configuracao.getFogasDados().getTelefone1();
		this.tx_tel2 = configuracao.getFogasDados().getTelefone2();
		this.tx_insc_est = configuracao.getFogasDados().getInscEstadual();
		this.tx_cnpj = configuracao.getFogasDados().getCnpj();
		
		this.vl_juros_aa = UtilsDatabase.getCampoValor(configuracao.getAppDados().getJuros());
		this.tx_org_vendas = configuracao.getAppDados().getOrgVendas();
		this.tx_centro = configuracao.getAppDados().getCentroVendas();
		this.tx_nf_serie = configuracao.getAppDados().getSerieNf();
		this.tx_nf_ultimanota = configuracao.getAppDados().getUltimaNfEmitida();
		this.tx_imei = configuracao.getAppDados().getImei();
		this.tx_matricula = configuracao.getAppDados().getMatricula();
		this.tx_nome = configuracao.getAppDados().getUsuario();
		this.tx_token = configuracao.getAppDados().getToken();
		this.tx_versao = configuracao.getAppDados().getVersao();
		this.ts_sincronizacao = new Date();
		this.tx_plano = configuracao.getAppDados().getPlano();
		this.cs_sync_nfe_online = configuracao.getAppDados().isAutorizar_nfe_online();
		this.nb_tentativas_leitura_qrcode = configuracao.getAppDados().getTentativas_leitura_qrcode();
		this.nb_tempo_espera_aut_nfe = configuracao.getAppDados().getTempo_espera_aut_nfe();
		this.nb_tempo_processamento_sync = configuracao.getAppDados().getTempo_processamento_sync();
		this.tx_senha_adm = configuracao.getAppDados().getSenha_adm();
	}
	
	public Configuracao getConfiguration() {
		FogasDados fogas = new FogasDados();
		fogas.setRazao(this.tx_razao);
		fogas.setLogradouro(this.tx_logradouro);
		fogas.setBairro(this.tx_bairro);
		fogas.setCep(this.tx_cep);
		fogas.setCidade(this.tx_cidade);
		fogas.setUf(this.tx_uf);
		fogas.setTelefone1(this.tx_tel1);
		fogas.setTelefone2(this.tx_tel2);
		fogas.setInscEstadual(this.tx_insc_est);
		fogas.setCnpj(this.tx_cnpj);
		
		AppDados app = new AppDados();
		app.setJuros((this.vl_juros_aa != null) ? String.valueOf(this.vl_juros_aa.doubleValue()) : null);
		app.setOrgVendas(this.tx_org_vendas);
		app.setCentroVendas(this.tx_centro);
		app.setSerieNf(this.tx_nf_serie);
		app.setUltimaNfEmitida(this.tx_nf_ultimanota);
		app.setImei(this.tx_imei);
		app.setMatricula(this.tx_matricula);
		app.setUsuario(this.tx_nome);
		app.setToken(this.tx_token);
		app.setVersao(this.tx_versao);
		app.setDtSincronizacao(this.ts_sincronizacao);
		app.setPlano(this.tx_plano);
		app.setAutorizar_nfe_online(this.cs_sync_nfe_online);
		app.setTentativas_leitura_qrcode(this.nb_tentativas_leitura_qrcode);
		app.setTempo_espera_aut_nfe(this.nb_tempo_espera_aut_nfe);
		app.setTempo_processamento_sync(this.nb_tempo_processamento_sync);
		app.setSenha_adm(this.tx_senha_adm);
		
		Configuracao configuracao = new Configuracao();
		configuracao.setAppDados(app);
		configuracao.setFogasDados(fogas);
		return configuracao;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTx_razao() {
		return tx_razao;
	}

	public void setTx_razao(String tx_razao) {
		this.tx_razao = tx_razao;
	}

	public String getTx_logradouro() {
		return tx_logradouro;
	}

	public void setTx_logradouro(String tx_logradouro) {
		this.tx_logradouro = tx_logradouro;
	}

	public String getTx_bairro() {
		return tx_bairro;
	}

	public void setTx_bairro(String tx_bairro) {
		this.tx_bairro = tx_bairro;
	}

	public String getTx_cep() {
		return tx_cep;
	}

	public void setTx_cep(String tx_cep) {
		this.tx_cep = tx_cep;
	}

	public String getTx_cidade() {
		return tx_cidade;
	}

	public void setTx_cidade(String tx_cidade) {
		this.tx_cidade = tx_cidade;
	}

	public String getTx_uf() {
		return tx_uf;
	}

	public void setTx_uf(String tx_uf) {
		this.tx_uf = tx_uf;
	}

	public String getTx_tel1() {
		return tx_tel1;
	}

	public void setTx_tel1(String tx_tel1) {
		this.tx_tel1 = tx_tel1;
	}

	public String getTx_tel2() {
		return tx_tel2;
	}

	public void setTx_tel2(String tx_tel2) {
		this.tx_tel2 = tx_tel2;
	}

	public String getTx_insc_est() {
		return tx_insc_est;
	}

	public void setTx_insc_est(String tx_insc_est) {
		this.tx_insc_est = tx_insc_est;
	}

	public String getTx_cnpj() {
		return tx_cnpj;
	}

	public void setTx_cnpj(String tx_cnpj) {
		this.tx_cnpj = tx_cnpj;
	}

	public BigDecimal getVl_juros_aa() {
		return vl_juros_aa;
	}

	public void setVl_juros_aa(BigDecimal vl_juros_aa) {
		this.vl_juros_aa = vl_juros_aa;
	}

	public String getTx_org_vendas() {
		return tx_org_vendas;
	}

	public void setTx_org_vendas(String tx_org_vendas) {
		this.tx_org_vendas = tx_org_vendas;
	}

	public String getTx_centro() {
		return tx_centro;
	}

	public void setTx_centro(String tx_centro) {
		this.tx_centro = tx_centro;
	}

	public String getTx_nf_serie() {
		return tx_nf_serie;
	}

	public void setTx_nf_serie(String tx_nf_serie) {
		this.tx_nf_serie = tx_nf_serie;
	}

	public String getTx_nf_ultimanota() {
		return tx_nf_ultimanota;
	}

	public void setTx_nf_ultimanota(String tx_nf_ultimanota) {
		this.tx_nf_ultimanota = tx_nf_ultimanota;
	}

	public String getTx_matricula() {
		return tx_matricula;
	}

	public void setTx_matricula(String tx_matricula) {
		this.tx_matricula = tx_matricula;
	}

	public String getTx_nome() {
		return tx_nome;
	}

	public void setTx_nome(String tx_nome) {
		this.tx_nome = tx_nome;
	}

	public String getTx_imei() {
		return tx_imei;
	}

	public void setTx_imei(String tx_imei) {
		this.tx_imei = tx_imei;
	}

	public String getTx_token() {
		return tx_token;
	}

	public void setTx_token(String tx_token) {
		this.tx_token = tx_token;
	}

	public String getTx_plano() {
		return tx_plano;
	}

	public void setTx_plano(String tx_plano) {
		this.tx_plano = tx_plano;
	}

	public Integer getNb_ambiente() {
		return nb_ambiente;
	}

	public void setNb_ambiente(Integer nb_ambiente) {
		this.nb_ambiente = nb_ambiente;
	}

	public String getTx_versao() {
		return tx_versao;
	}

	public void setTx_versao(String tx_versao) {
		this.tx_versao = tx_versao;
	}

	public Date getTs_sincronizacao() {
		return ts_sincronizacao;
	}

	public void setTs_sincronizacao(Date ts_sincronizacao) {
		this.ts_sincronizacao = ts_sincronizacao;
	}

	public boolean isCs_sync_nfe_online() {
		return cs_sync_nfe_online;
	}

	public void setCs_sync_nfe_online(boolean cs_sync_nfe_online) {
		this.cs_sync_nfe_online = cs_sync_nfe_online;
	}

	public Integer getNb_tentativas_leitura_qrcode() {
		return nb_tentativas_leitura_qrcode;
	}

	public void setNb_tentativas_leitura_qrcode(Integer nb_tentativas_leitura_qrcode) {
		this.nb_tentativas_leitura_qrcode = nb_tentativas_leitura_qrcode;
	}

	public Integer getNb_tempo_espera_aut_nfe() {
		return nb_tempo_espera_aut_nfe;
	}

	public void setNb_tempo_espera_aut_nfe(Integer nb_tempo_espera_aut_nfe) {
		this.nb_tempo_espera_aut_nfe = nb_tempo_espera_aut_nfe;
	}

	public Integer getNb_tempo_processamento_sync() {
		return nb_tempo_processamento_sync;
	}

	public void setNb_tempo_processamento_sync(Integer nb_tempo_processamento_sync) {
		this.nb_tempo_processamento_sync = nb_tempo_processamento_sync;
	}

	public String getTx_senha_adm() {
		return tx_senha_adm;
	}

	public void setTx_senha_adm(String tx_senha_adm) {
		this.tx_senha_adm = tx_senha_adm;
	}
}